%% clc;clear;close all
x =1:0.01:10;
y = sin(x);
% figure
% plot(x,y)

n = 3;
FourierSeries(x,y,n)

function FourierSeries(x,y,n)
    % x,y 确定一个函数
    % n 傅里叶级数展开次数
    
    a = [];
    b = [];
    c = [];
    s = [];
    T = max(x)-min(x);
    w = 2*pi/T; % 转速，必须要有（保证第一级cos sin的周期与被拟合函数周期相等）
    
    % 计算傅里叶级数常数项
    a0 = 2*trapz(x,y)/T;
    for i=1:n
        c(:,i) = diag(y'*cos(i*w*x)); % 被拟合的数据
        a(i) = 2*trapz(x,c(:,i))/T; % 求积分
        s(:,i) = diag(y'*sin(i*w*x)); % 被拟合的数据
        b(i) = 2*trapz(x,s(:,i))/T; % 求积分
    end
    
    % 计算展开项，并累加
    t = x;
    M = zeros(size(t));
    for i=1:n
       M = M + a(i)*cos(i*w*t) + b(i)*sin(i*w*t);
    end
    
    % 最终结果
    f = a0/2 + M; % 
    
    figure
    plot(x,y)
    hold on
    plot(t,f);
    title(['Fourier Series 展开次数 n =',num2str(n)])
    % 两行标题title({['xxx'],['000']})
    % 添加公式
    % h=text(5,7000,'$$ y = e^x $$');
    h = legend('$$ y = e^x $$','FourierSeries')
    set(h,'Interpreter','latex');
    
end